"use strict";
// 3.1 ts中定义函数的方法
// 函数声明
// function run(): string {
//   return 'run'
// }
// alert(run())
// 匿名函数
// let fun2 = function (): number {
//   return 123
// }
// alert(fun2()) /* 调用方法 */
// ts中定义方法传参
// function getInfo(name: string, age: number): string {
//   return `${name} -- ${age}`
// }
// alert(getInfo('wuchao', 26))
// 匿名函数传参
// let getInfo = function (name: string, age: number): string {
//   return `${name} --- ${age}`
// }
// alert(getInfo('吴超', 26))
// 没有返回值的方法
// function run(): void {
//   alert('没有返回值的方法')
// }
// run()
// 3.2 函数方法可选参数
// es5里面方法的实参和形参可以不一样，但是ts中必须一样，如果不一样就需要配置可选参数
// 注意；可选参数必须配置到参数的最后面
// function getInfo(name: string, age?: number): string {
//   // if (age) {
//   //   return `${name} -- ${age}`
//   // } else {
//   //   return `${name} -- 年龄保密`
//   // }
//   return age ? `${name} -- ${age}` : `${name} -- 年龄保密`
// }
// alert(getInfo('wuchao', 26))
// alert(getInfo('wuchao'))
// 3.3 默认参数
// es5里面没法设置默认参数，es6和ts中都可以设置默认参数
// function getInfo(name: string, age: number = 20): string {
//   if (age) {
//     if (age) {
//       return `${name} -- ${age}`
//     } else {
//       return `${name} -- 年龄保密`
//     }
//   }
// }
// alert(getInfo('张三'))
// 3.4剩余参数
// 三点运算符 接受传递过来的值
// function sum(...res: number[]): number {
//   let sum = 0
//   for (let i = 0; i < res.length; i++) {
//     sum += res[i]
//   }
//   return sum
// }
// alert(sum(1, 2, 3, 5))
// 3.5 ts函数重载
// java中方法的重载：重载指的是两个或者两个以上同名函数，但它们的参数不一样，这时会出现函数重载的情况。
// typescript中的重载：通过为同一个函数提供多个函数类型定义来试下多种功能的目的。
// ts为了兼容es5 以及 es6 重载的写法和java中有区别。
// es5中出现同名方法，下面的会替换上面的方法
/*
  function css (config) {

  }
   function css (config, val) {
    
  }
*/
// ts中的重载
// function getInfo(name: string): string
// function getInfo(age: number): string
// function getInfo(str: any): any {
//   if (typeof str === 'string') {
//     return `我叫${str}`
//   } else {
//     return `我的年龄是${str}`
//   }
// }
// alert(getInfo('张三'))
// alert(getInfo(20))
// function getInfo(name: string): string
// function getInfo(name: string, age: number): string
// function getInfo(name: any, age?: number): any {
//   if (age) {
//     return `我叫${name},我的年龄是${age}`
//   } else {
//     return `我叫${name}`
//   }
// }
// alert(getInfo('wuchao', 26))
// alert(getInfo('wuchao'))
// 3.6 箭头函数
// this指向问题 箭头函数里面的this指向上下文
setTimeout(function () {
    alert('run');
}, 1000);
